/**
 * TDS PEC 4
 * Grupo 3H2M
 *
 * El paquete <code>edu.uoc.tds.pec4.server.bbdd</code> agrupa todos los
 * interfaces y clases que encapsulan los objetos de acceso a datos (DAO),para
 * realizar el acceso a datos. La base de datos es PostgreSQL.
 */
package edu.uoc.tds.pec4.server.bbdd;

import edu.uoc.tds.pec4.beans.RolDTO;
import edu.uoc.tds.pec4.beans.UsuarioDTO;
import edu.uoc.tds.pec4.server.bbdd.exceptions.DataBaseDAOException;
import java.util.List;

/**
 * La clase <code>UsuarioDAO</code> es el componente de software que suministra
 * una interfaz común entre la aplicación y la base de datos, relacionada con la
 * gestión de los usuarios.<br />
 * Extiende la clase <code>DataBaseDAO</code><br />
 * Es el interfaz común que todas las implementaciones de IIncidenciaDAO deben cumplir.<br />
 * 
 * @author	Luis Rivas Mariño
 * @version	03/12/2011 
 * @since	1.00
 * @see         edu.uoc.tds.pec4.server.bbdd.exceptions.DataBaseDAOException
 */
public interface IUsuarioDAO {

    /**
     * Realiza el alta de un usuario en la base de datos.
     * @param usuario El usuario a dar de alta en la base de datos
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public void altaUsuario(UsuarioDTO usuario) throws DataBaseDAOException;

    /**
     * Realiza la baja lógica de un usuario en la base de datos.
     * @param usuario El usuario a dar de baja
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public void bajaUsuario(String idUsuario) throws DataBaseDAOException;

    /**
     * Realiza la consulta de un usuario por NIF 
     * @param   nif El nif del usuario a consultar en la base de datos
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public UsuarioDTO consultaUsuarioPorNif(String nif) throws DataBaseDAOException;

    /**
     * Realiza la consulta de un usuario por su nombre y apellidos 
     * @param   nombre El nombre del usuario a consultar en la base de datos
     * @param   apellidos Los apellidos del usuario a consultar en la base de datos 
     * @return  El usuario consultado
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public UsuarioDTO consultaUsuarioPorNombre(String nombre, String apellidos) throws DataBaseDAOException;

    /**
     * Realiza la modificación de un usuario en la base de datos.
     * @param   usuario El usuario a modificar en la base de datos
     * @return  El usuario consultado
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public void modificaUsuario(UsuarioDTO usuario) throws DataBaseDAOException;

    /**
     * Inserta en el campo CC correspondiente a un usuario del tipo Cliente
     * los datos del número de cuenta corriente facilitados
     * @param idUsuario el identificador del usuario Cliente
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public void ccCliente(String cc, String idUsuario) throws DataBaseDAOException;
    
    /**
     * Realiza la reactivación de un usuario
     * @param idUsuario El identificador del usuario a reactivar
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
   public void activaUsuario(String idUsuario) throws DataBaseDAOException;    

    /**
     * Inserta un roles asignado a un usuario en la base de datos
     * @param idUsuario El identificador del usuario
     * @param idRol El identificador del rol asignado
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public void usuarioRol(String idUsuario, int idRol) throws DataBaseDAOException;
    
    /**
     * Comprueba si un usuario tiene asignado un rol concreto
     * @param idUsuario El identificador del usuario
     * @param idRol El identificador del rol asignado
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public boolean rolUsuario(String idUsuario, int idRol) throws DataBaseDAOException;
    
    /**
     * Elimina un rol asignado a un usuario en la base de datos
     * @param idUsuario El identificador del usuario
     * @param idRol El identificador del rol asignado
     * @return true  La asignación del rol al usuario ha sido eliminada
     *         false No existe la asignación del rol al usuario
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public void bajaRol(String idUsuario, int idRol) throws DataBaseDAOException;
    
    /**
     * Consulta los datos de un usuario de la base de datos
     * @param id El identificador del usuario a consultar
     * @return El usuario consultado
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public UsuarioDTO consultaUsuarioPorId(String id) throws DataBaseDAOException;

    /**
     * Obtiene la lista de roles asignados a un usuario
     * @param id El identificador del usuario 
     * @return La lista de los roles del usuario
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public List<RolDTO> getRoles(String id) throws DataBaseDAOException;
}
